% !TEX root = ../latex-faq-cn.tex

\section{图片篇}


\faq{LaTeX可以插图哪些类型的图片？}{latex-figure}

我们通常使用LaTeX、PDFTeX、XeTeX编译源文件。各种编译方式下图形格式支持如下
\begin{itemize}
    \item LaTeX直接支持EPS、PS图形文件，间接支持JPEG、PNG等格式
    \item PDFTeX直接支持PNG、PDF、JPEG格式图形文件，间接支持EPS
    \item XeLaTeX直接支持BMP、JPEG、PNG、EPS、PDF图形格式。如果你使用MacOS，那么
    XeLaTeX 还会支持 GIF、PICT、PSD、SGA、TGA、TIFF 等格式 。
\end{itemize}

【注意】在使用PDFLaTeX时，如果要插入EPS，可以先把EPS转化为其他格式（比如PDF、JPEG、PNG、EPS），或者在导言区加载epstopdf，此宏包需要在graphicx宏包之后调用。更改图片格式可以使用ImageMagick或者类似\href{http://www.gaitubao.com}{改图宝}等在线改图软件。
eps 和 pdf 两种格式。eps 是一种在 TeX 中很常用的矢量绘图格式。支持导出
eps 格式的绘图软件包括:MATLAB、Mathematica、GNUPlot、 Asymptote 等。
如果需要使用 pdf 文档中的现成的矢量图，不要使用截屏软件截取，否则
会生成位图，造成失真。可以用 Acrobat 等软件进行提取，剪切。如果使 用
MacOS 系统，可以通过 Skim 阅览器选取,
复制，从剪切板生成笔记的方法导出图像。

\faq{图片的路径如何自动设置，不用正文一个个设置路径？}{figure-path-set}

可以使用指令graphicspath来设置图片路径，如：
\begin{texinlist}
\graphicspath{{./figures/}}
\end{texinlist}

即设定图片路径为当前目录下子文件夹figures。


\faq{在子文档中想用主文档所在文件夹下的子文件夹内的图片？}{subdoc-figure}

关键在于找到图片，借助于编辑器的魔法注释，直接暴力使用指定路径。
假设
\begingroup
  \dirtree {%
    .1 main.tex.\DTcomment{主文件}.
    .2 subfile/\DTcomment{子文件所在文件夹}.
    .2 figure/\DTcomment{图片所在文件夹}.
  }
\endgroup

有如下代码：

main.tex:
\begin{texlist}
\documentclass{article}
\usepackage{graphicx}
\begin{document}
  \include{./subfile/sub}
\end{document}
\end{texlist}

sub.tex:
\begin{texlist}
% !TeX root = ../file.tex
\section{test}
hello! \LaTeX{}!
\includegraphics[width=\linewidth]{../figure/figure.png}
\end{texlist}

此种情况不能够使用 \cs{graphicspath}指定插图路径。

\faq{图片浮动如何控制？各自参数如何使用？}{figure-control}

插图(figure)、表格(table)等浮动体浮动位置有四个选项可以控制，分别是 h --
here（当前位置）, t -- top （页面顶部）, b -- bottom（页面底部）和 p --
page（单独一个浮动页）。这四个位置选项的输入顺序是无所谓的，也就是说
{[}htbp{]} 和 {[}btph{]} 的效果是一样的。LaTeX
总是按照h-t-b-p的顺序依次尝试浮动，直到找到合适的位置。LaTeX
标准文档类中对位置参数的默认值是{[}tbp{]}，可以通过重定义内部命令
\cs{fps@figure} 和\cs{fps@table} 来修改。

\begin{texinlist}
\makeatletter
\def\fps@figure{htbp}
\def\fps@table{htbp}
\makeatother
\end{texinlist}

LaTeX 放置浮动体时，浮动体不能造成页面溢出（overfull
page），且只能放置于当前页或后面的页面中，浮动体根据其类型必须按源码内出现的顺序出现，也就是说，只有当之前的插图都被处理之后才能对下一幅插图进行处理，那么，只要前面有未处理的插图，当前位置就不会放置插图，一幅不可放置的插图将阻碍其后的图形放置，直到文件结束或出现|\clearpage| 等处理所有未处理浮动体的命令出现之处。

需要说明的是，对于两种浮动体类型，表格的排版和插图的排版是相互独立处理的，未处理的表格不会影响插图的布置。一般来说，给出的参数越多，排版的结果就越好，单个参数选项极容易引发问题，一旦浮动体不适合指定位置，将被搁置并阻碍接下来其他浮动体的处理，一旦被阻塞的浮动体超过LaTeX允许的最大值，还将产生错误。

LaTeX还设定了一些计数器来限制页面上浮动体的数量，见表 \ref{figure-counter}。

\begin{table}[ht!]
  \centering
  \begin{tabular}{|c|c|}
    \hline
    计数器 & 含义 \\
    \hline
    dbltopnumber & twocolumn 模式下可以位于页面顶部的浮动体最大数目（缺省为2） \\
    \hline
    topnumber & 可以位于页面顶部的浮动体最大数目（缺省为2） \\
    \hline
    bottomnumber & 可以位于页面底部的浮动体最大数目（缺省为1）\\
    \hline
    totalnumber & 可以位于文本页中的浮动体最大数目（缺省为3） \\
    \hline
  \end{tabular}
  \caption{浮动体计数器含义}
  \label{figure-counter}
\end{table}

LaTeX 还设定了一些比例参数控制浮动体的放置，见表 \ref{figure-params}。

\begin{table}[ht!]
  \centering
  \begin{tabular}{|c|c|}
    \hline
    参数 & 含义 \\
    \hline
    |\textfraction| & 文本页上文本最小比例（默认0.2） \\
    \hline
    |\topfraction| & 页面顶部浮动体高度比例（默认0.7） \\
    \hline
    |\bottomfraction| & 页面底部浮动体高度比例（默认0.3） \\
    \hline
    |\floatpagefraction| & 浮动页浮动体高度比例（默认0.5） \\
    \hline
    |\dbltopfraction| & twocolumn 模式下页面顶部浮动体高度比例（默认0.7）\\
    \hline
    |\dblfloatpagefraction| & twocolumn 模式下浮动页浮动体高度比例（默认0.5） \\
    \hline
  \end{tabular}
  \caption{浮动体参数含义}
  \label{figure-params}
\end{table}


这些计数器和比例值可以通过 \cs{setcounter} 和\cs{renewcommand}
分别进行调整。但调整时应特别小心，不适当的比例值会导致非常糟糕的排版或大量未处理的浮动体。如果只是需要LaTeX在处理某一浮动体时忽略以上这些限制条件，可以在浮动体位置选项参数中加!即可。注意，!
对 浮动页限制条件的忽略无效。

\begin{texinlist}
\begin{table}[!hbt]
  the contents of the table ...
\end{table}
\end{texinlist}


\faq{图文混排用什么方法实现？}{figure-text-inline}

大概有好几个宏包：picinpar、wrapfig，以及过时了的 picins
宏包。但是都有或多或少的问题，都不能够做得比较智能。等着后来人的修订以及更好的实现方式吧。

\begin{itemize}
  \item wrapfig 用法
  \begin{texinlist}
\begin{wrapfigure}{行数}{位置}{超出长度}{宽度}
  <图形>
\end{wrapfigure}
  \end{texinlist}
  \begin{itemize}
    \item 行数
    是指图形高度所占的文本行的数目，如果不给出此选项， wrapfig 会自动计算。
    \item 位置
    是指图形相对于文本的位置，须给定下面四项的一个。 
    \begin{description}
      \item[r,R] 表示图形位于文本的左边。
      \item[l,L] 表示图形位于文本的右边。
      \item[i,R] 表示图形位于页面靠里的一边（用在双面格式里）。
      \item[o,O] 表示图形位于页面靠外的一边。
    \end{description}
    \item 超出长度
    是指图形超出文本边界的长度，缺省为 0pt。 
    \item 宽度
    指图形的宽度。 wrapfig 会自动计算 图形的高度。不过，我们也可设定图形的高度，具体可见 wrapfig.sty 内 的说明。
  \end{itemize}
  \item picinpar 用法 \\
  picinpar 宏包定义了一个基本的环境 window，还有两个变体  figwindow 和 tabwindow。允许在文本段落中打开一个``窗口 ''， 在其中放入图形、文字和表格等。这里我们主要讨论将图形放入文本段落 的用法，其它的用法可参考 picinpar 的说明。  
  \begin{texinlist}
\begin{window} [行数，对齐方式，内容，内容说明]\end{window}
\begin{figwindow} [行数，对齐方式，图形，标题]\end{figwindow}
  \end{texinlist}
  \begin{itemize}
    \item 行数是指“窗口”开始前的行数。 
    \item 对齐方式是指在段落中“窗口'“的对齐方式。缺省为 l， 即左对齐。 另外两种是 c ：居中和 r ：右对齐 。
    \item 第三个参数是出现在“窗口”中的“内容”，这在 figwindow 中就是 要插入的图形。第四个参数则是对``窗口''内容的说明性文字，这在  figwindow 中就是图形的标题。
  \end{itemize}
\end{itemize}


\faq{并列插图如何进行排版}{col-figure-install}

并列插图有几种情况：

\begin{itemize}
  \item 并排摆放，各有标题。\\
  可以在figure环境中使用两个minipage环境，每个里面插入一幅插图。
  
  \begin{texinlist}
    \documentclass{ctexart}
    \usepackage{mwe}
    \begin{document}
    \begin{figure}
      \centering
      \begin{minipage}{0.45\linewidth}
        \centering
        \includegraphics[width=0.9\linewidth]{example-image-a.pdf}
        \caption{左边图}
      \end{minipage}
      \hfill
      \begin{minipage}{0.45\linewidth}
        \centering
        \includegraphics[width=0.9\linewidth]{example-image-b.pdf}
        \caption{右边图}
      \end{minipage}
    \end{figure}
    \end{document}
  \end{texinlist}
  
  \item 并排摆放，共享标题。\\
  通过使用两个 \cs{includegraphics} 命令
  \begin{texinlist}
    \documentclass{ctexart}
    \usepackage{mwe}
    \begin{document}
    \begin{figure}
      \centering
      \includegraphics[width=0.45\linewidth]{example-image-a.png}
      \hfill
      \includegraphics[width=0.45\linewidth]{example-image-b.png}
      \caption{总标题}
    \end{figure}
    \end{document}
  \end{texinlist}
  
  \item 并排摆放，共享标题，并且有各自的子标题 \\
  如果想要两幅并排的图片共享一个标题，并且各有自己的子标题，可以使用 subfig 宏包或者 subcaption 宏包。
  
  \begin{texinlist}
    \documentclass{ctexart}
    \usepackage{subfig}
    \usepackage{mwe}
    \begin{document}
    \begin{figure}
      \centering
      \subfloat[左图标题]{\includegraphics[width=0.4\linewidth]{example-image-a.pdf}}
      \hfill
      \subfloat[右图标题]{\includegraphics[width=0.4\linewidth]{example-image-b.pdf}}
      \caption{总标题}
   \end{figure}
    \end{document}
  \end{texinlist}
  
  \begin{texinlist}
    \documentclass{ctexart}
    \usepackage{subcaption}
    \usepackage{mwe}
    \begin{document}
    \begin{figure}
      \begin{subfigure}{0.5\linewidth}
        \centering
        \includegraphics[width=0.9\linewidth]{example-image-a.pdf}
        \caption{左图标题}
      \end{subfigure}
      \hfill
      \begin{subfigure}{0.5\linewidth}
        \centering
        \includegraphics[width=0.9\linewidth]{example-image-b.pdf}
        \caption{右图标题}
      \end{subfigure}
      \caption{总标题}
    \end{figure}
    \end{document}
  \end{texinlist}
\end{itemize}

此外，还可考虑floatrow宏包的一些功能。


%\faq{并列子图如何进行排版}{col-sub-figure}
%
%并列子图可以看看subfigure，subfloat、subcaption等宏包。


\faq{如果想让图片的题注在图片右侧，应该怎么做}{figure-right}

可以利用盒子来实现这个功能。下面给出一个例子

\begin{texinlist}
\documentclass{article}
\usepackage{graphicx}
\begin{document}
    \begin{figure}
    \centering
    \includegraphics[width=0.45\linewidth]{figure.png}
    \parbox[b]{0.45\linewidth}{\caption{the content of caption}}
  \end{figure}
\end{document}
\end{texinlist}

若要让题注在图片左侧，只需将 \textbackslash{}parbox 那段代码移到
\textbackslash{}includegraphics 之前。


\faq{在插图较多，文字较少的情况下，正文会产生较多空白，或者单个图片占一页的情况，如何处理？}{ins-fig-or-text}

尽量避免这样的行文方式，比如可以将图片以附录形式集中排版。单个图片占一页在绝大多数情况下都不需要处理，浮动体页是很常见的形式。只有当图片恰好出现在一章的结尾，正文正好排满一页后换页，而图表本身尺寸又不大的时候，图表以浮动页排版方式排在页面正中有些突兀，这时可以通过浮动选项设置{[}!ht{]}要求其在页面顶部排版，并忽略latex从美学角度出发对浮动体做出的一些限制。


\faq{在双栏文档中，如何插入单栏图片，表格？}{col-ins-fig-tab}

要看双栏文档是如何实现的。若双栏文档的实现方式是文档类的 twocolumn
选项实现的，那么用带*形式的浮动体环境替代原浮动体环境即可，这时的浮动选项只有tp有效；若双栏文档是以
multicol 宏包的 multicols 环境实现的，那么，在 multicols
环境内不支持浮动体，当需要插入单栏图片表格时，可结束multicols环境，待插入图片、表格后，重新开启multicols
环境。


\faq{不想让图片浮动，又想使用caption，如何二者兼得？}{fig-cap}

caption宏包提供了一个\cs{captionof}命令，可以在浮动体环境外使用，命令的语法格式是：\cs{captionof}\oarg{floattype}\oarg{list entry}\marg{heading}，举例如下：

\begin{texinlist}
\begin{center}
\includegraphics{example-image.pdf}
\captionof{figure}{the example}
\end{center}
\end{texinlist}

不过非常不建议使用这种方式，浮动体是一种很好的处理图表的方式。


\faq{有没有办法把图片固定在某位置}{fig-on-this-pos}

不使用浮动体就会在你指定的位置出现了，但是非常非常不可取，一般不建议这么搞。

\faq{图片的题注很长，如何调整格式}{}

可以考虑使用 caption 包，例如题注内容进行悬挂缩进，最后一行居中，可以用如下代码：

\begin{texlist}
  \documentclass{article}
  \usepackage{mwe}
  \usepackage[justification=centerlast,format=hang]{caption}
  \begin{document}
  \begin{figure}
      \centering
      \includegraphics{example-image.pdf}
      \caption{Lorem ipsum dolor sit amet, consectetuer adipiscing elit.  Ut puruselit, vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur dictum gravidamauris. Nam arcu libero, nonummy eget, consectetuer id, vulputate a, magna.Donec vehicula augue eu neque. Pellentesque habitant morbi tristique senectuset netus et malesuada fames ac turpis egestas.  Mauris ut leo.  Cras viverrametus rhoncus sem. Nulla et lectus vestibulum urna fringilla ultrices. Phaselluseu tellus sit amet tortor gravida placerat. Integer sapien est, iaculis in, pretiumquis, viverra ac, nunc.  Praesent eget sem vel leo ultrices bibendum.  Aeneanfaucibus. Morbi dolor nulla, malesuada eu, pulvinar at, mollis ac, nulla. Cur-abitur auctor semper nulla. Donec varius orci eget risus. Duis nibh mi, congueeu, accumsan eleifend, sagittis quis, diam. Duis eget orci sit amet orci dignissimrutrum.}
      \label{fig:my_label}
  \end{figure}
  \end{document}
\end{texlist}

\faq{图片双语标题要如何实现？}{}

可以考虑 caption 包和 bicaption 的搭配用法。
这里给出一个示例：

\begin{texlist}
  \documentclass{ctexart}
  \usepackage{caption}
  \usepackage{bicaption}
  \usepackage{subcaption}
  \captionsetup[bi-first]{bi-first}
  \captionsetup[bi-second]{bi-second}
  \DeclareCaptionOption{bi-first}[]{\def\figurename{图}}
  \DeclareCaptionOption{bi-second}[]{\def\figurename{Figure}}
  \renewcommand{\thefigure}{\thesection--\arabic{figure}}
  \usepackage{mwe}
  \begin{document}
  \section{第一节}
  \begin{figure}
    \centering
    \includegraphics[width=\linewidth]{example-image.pdf}
    \bicaption{示意图}{Example image}
    \label{fig}
  \end{figure}
  图 \ref{fig} 是一个示意图。
  \end{document}
\end{texlist}

%\faq{如何可以写一段话，放张图片，再写一段话，再放图片。}{}


%\faq{如何在一张图片上再叠放另外一张图片？如下图，在图中小孩的白板上分别加一个对号和叉号。}{}

% \includegraphics{https://qqadapt.qpic.cn/txdocpic/0/cb8fb575407168ba7c289778e7f7c526/0}
